﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;

namespace Nature.Toolkit.GMix.Generic
{
    public static class Lhs
    {
        public static LhsSpecies Species(string speciesId) { return new LhsSpecies(speciesId); }

        public static LhsComponent Component(string name) { return new LhsComponent(name); }

        public static LhsTemperatuire Temperature { get { return new LhsTemperatuire(); } }

        public static LhsTemperatuireBase TemperatureBase { get { return new LhsTemperatuireBase(); } }

        public static LhsPressure Pressure { get { return new LhsPressure(); } }

        public static LhsPressureBase PressureBase { get { return new LhsPressureBase(); } }

        public static LhsCompressionRatio CompressionRatio { get { return new LhsCompressionRatio(); } }

        public static LhsMachNumber MachNumber { get { return new LhsMachNumber(); } }

        public static LhsEquivalenceRatio EquivalenceRatio { get { return new LhsEquivalenceRatio(); } }

        public static LhsMixtureFraction MixtureFraction { get { return new LhsMixtureFraction(); } }

    }


    [DebuggerDisplay("{ComponentName}")]
    [Serializable]
    public class LhsComponent : ILhsComponent
    {
        public LhsComponent(string name)
        {
            this.ComponentName = name;
        }

        public static implicit operator LhsComponent(string name) { return new LhsComponent(name); }

        #region ILhsComponent Members

        public string ComponentName
        {
            get;
            private set;
        }

        #endregion
    }

    [DebuggerDisplay("{SpeciesId}")]
    [Serializable]
    public class LhsSpecies : ILhsSpecies
    {
        public LhsSpecies(string speciesId)
        {
            this.SpeciesId = speciesId;
        }

        public static implicit operator LhsSpecies(string speciesId) { return new LhsSpecies(speciesId); }

        #region ILhsSpecies Members

        public string SpeciesId
        {
            get;
            private set;
        }

        #endregion
    }

    [DebuggerDisplay("Equivalence Ratio")]
    [Serializable]
    public class LhsEquivalenceRatio : ILhsEquivalenceRatio { }

    [DebuggerDisplay("Mixture Fraction")]
    [Serializable]
    public class LhsMixtureFraction : ILhsMixtureFraction { }

    [DebuggerDisplay("Pressure")]
    [Serializable]
    public class LhsPressure : ILhsPressure { }

    [DebuggerDisplay("Base Pressure")]
    [Serializable]
    public class LhsPressureBase : ILhsPressureBase { }

    [DebuggerDisplay("Temperature")]
    [Serializable]
    public class LhsTemperatuire : ILhsTemperature { }

    [DebuggerDisplay("Base Temperature")]
    [Serializable]
    public class LhsTemperatuireBase : ILhsTemperatureBase { }

    [DebuggerDisplay("Compression Ratio")]
    [Serializable]
    public class LhsCompressionRatio : ILhsCompressionRatio { }

    [DebuggerDisplay("Mach Number (U / C)")]
    [Serializable]
    public class LhsMachNumber : ILhsMachNumber { }
}
